package com.knowledgegraph.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.knowledgegraph.entity.KnowledgeGraph;

import java.util.List;
import java.util.Map;

/**
 * 知识图谱服务接口
 * 
 * @author system
 * @since 2024-01-01
 */
public interface KnowledgeGraphService extends IService<KnowledgeGraph> {

    /**
     * 创建知识图谱
     * 
     * @param knowledgeGraph 知识图谱信息
     * @param creatorId 创建者ID
     * @return 创建结果
     */
    boolean createGraph(KnowledgeGraph knowledgeGraph, Long creatorId);

    /**
     * 更新知识图谱
     * 
     * @param knowledgeGraph 知识图谱信息
     * @param userId 用户ID
     * @return 更新结果
     */
    boolean updateGraph(KnowledgeGraph knowledgeGraph, Long userId);

    /**
     * 删除知识图谱
     * 
     * @param graphId 图谱ID
     * @param userId 用户ID
     * @return 删除结果
     */
    boolean deleteGraph(Long graphId, Long userId);

    /**
     * 根据创建者查询图谱列表
     * 
     * @param creatorId 创建者ID
     * @return 图谱列表
     */
    List<KnowledgeGraph> getGraphsByCreator(Long creatorId);

    /**
     * 分页查询公开图谱
     * 
     * @param page 分页参数
     * @return 图谱分页列表
     */
    IPage<KnowledgeGraph> getPublicGraphs(Page<KnowledgeGraph> page);

    /**
     * 搜索图谱
     * 
     * @param keyword 关键词
     * @param page 分页参数
     * @return 图谱分页列表
     */
    IPage<KnowledgeGraph> searchGraphs(String keyword, Page<KnowledgeGraph> page);

    /**
     * 获取图谱统计信息
     * 
     * @param userId 用户ID
     * @return 统计信息
     */
    Map<String, Object> getGraphStatistics(Long userId);

    /**
     * 更新图谱统计数据
     * 
     * @param graphId 图谱ID
     */
    void updateGraphStatistics(Long graphId);

    /**
     * 检查用户是否有图谱权限
     * 
     * @param graphId 图谱ID
     * @param userId 用户ID
     * @return 是否有权限
     */
    boolean hasGraphPermission(Long graphId, Long userId);
}